import Vue from 'vue'
import Vuex from 'vuex'
import { getGeocoder } from '../config/api'
Vue.use(Vuex)

const store = new Vuex.Store({
	state: {
		hasLogin: false,
		userInfo: uni.getStorageSync('userInfo') || {},
		cityInfo: uni.getStorageSync('cityInfo') || {},
		sysInfo: {}
	},
	mutations: {
		setUserInfo(state, userInfo) {
			state.userInfo = userInfo;
			state.hasLogin = true;
			uni.setStorageSync('userInfo', userInfo);
		},
		logout(state) {
			state.hasLogin = false;
			state.userInfo = {};
			uni.removeStorage({
                key: 'userInfo'
            })
			uni.setStorage({//缓存用户登陆状态
				key: 'hasLogin',
				data: false
			})
		},
		setCityInfo(state, data) {
			uni.setStorageSync('cityInfo', data);
			state.cityInfo = data;
		},
		setSystemInfo(state, data) {
			state.sysInfo = data
		}
	},
	actions: {
		// 位置授权
		async getAuthorize({ dispatch }) {
			const [error, data] = await uni.showModal({
				title: "您已拒绝地理位置权限",
				content: "是否进入权限管理，调整授权？",
			});
			if (data.confirm) {
				const [error, data] = await uni.openSetting();
				if (data.authSetting["scope.userLocation"]) dispatch("initLocationFunc");
			}
		},
		// 获取当前定位
		async initLocationFunc({ dispatch, state }) {
			console.log("获取地址");
			try {
				const [error, res] = await uni.getLocation({
					// #ifndef APP
					type: "gcj02",
					// #endif
				});
				console.log(error, res, "----");
				// if(error?.errMsg == 'getLocation:fail 频繁调用会增加电量损耗，可考虑使用 wx.onLocationChange 监听地理位置变化') return toast({ title: '频繁定位，请稍后' })
				// #ifdef MP
				dispatch("getSystemInfo");
				if (!state.sysInfo.locationEnabled) {
					uni.showModal({
						title: "温馨提示",
						content: "您的手机定位还未开启",
					});
					return;
				}
				// #endif
				// #ifdef MP
				if (!res) return dispatch("getAuthorize");
				// #endif
				if (error) {
					uni.showModal({
						title: "温馨提示",
						// content: JSON.stringify(error.errMsg)
						content: "获取位置失败，请检查是否开启定位！",
					});
					return;
				}
				// #ifdef APP-PLUS

				if (!res) return toast({ title: "获取位置失败" });
				// #endif
				dispatch("getGeocoderFunc", {
					location: `${res.latitude},${res.longitude}`,
				});
			} catch (err) {
				console.log(err);
				// toast({ title: err.errMsg })
				// throw new Error(err + '获取位置')
			}
		},
		// 逆解析地址
		getGeocoderFunc({ commit }, location) {
			console.log(location);
			getGeocoder({ ...location }).then((res) => {
				console.log(res);
				if (res.code == 1) {
					const result = res.data.result;
					const city_id = res.data.city_id;
					commit("setCityInfo", {
						id: city_id,
						name: result.ad_info.city,
						gcj02_lat: result.location.lat,
						gcj02_lng: result.location.lng,
					});
				} else {
					toast({ title: res.msg });
				}
			});
		},


		getSystemInfo({ state,  commit }) {
			uni.getSystemInfo({
				success: res => {
					let {
						statusBarHeight,
						platform,
					} = res;
					let navHeight;
					if (platform == 'ios' || platform == 'devtools') {
						navHeight = statusBarHeight + 44;
					} else {
						navHeight = statusBarHeight + 48;
					}
					commit('setSystemInfo', {
						...res,
						navHeight,
					})
					console.log(state)
				},
				fail(err) {
					console.log(err);
				}
			});
		}
	},
	getters: {
		cityInfo: state => state.cityInfo,
		userInfo: state => state.userInfo,
	}
})

export default store
